﻿using System.Data;
using Ortodoctor.modelo;
using Ortodoctor.Componentes;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections;

namespace Ortodoctor.Funcionario
{
    public partial class Agenda : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            foreach (Control c in Page.Controls)
                c.ClientIDMode = System.Web.UI.ClientIDMode.Static;

            CarregaDentistas();
            CarregaClientes();
        }

        protected void CarregaDentistas()
        {
            modeloDentista md = new modeloDentista();
            DataTable dt = md.getAll();

            selectDentista.Items.Add(new ListItem(" -- Selecione um dentista ", "-1"));

            foreach (DataRow dr in dt.Rows)
            {
                selectDentista.Items.Add(new ListItem(dr["nome"].ToString(), dr["id_dentista"].ToString(), true));
            }

            selectDentista.SelectedIndex = 0;
        }

        protected void CarregaClientes()
        {
            modeloCliente modelo = new modeloCliente();
            DataTable dt = modelo.getAll();

            selectCliente.Items.Add(new ListItem(" -- Selecione um cliente ", "-1"));

            foreach (DataRow dr in dt.Rows)
            {
                selectCliente.Items.Add(new ListItem(dr["nome"].ToString(), dr["id_cliente"].ToString(), true));
            }

            selectCliente.SelectedIndex = 0;            
        }

        [WebMethod]
        public static List<object> getAgendaDentista(int idDentista, string data)
        {
            DateTime dtBase    = DateTime.Parse(data);
            DateTime dtInicial = dtBase.AddDays(-(Convert.ToInt32(dtBase.DayOfWeek) - 1));
            DateTime dtFinal   = dtBase.AddDays(-(Convert.ToInt32(dtBase.DayOfWeek) - 1)).AddDays(6);

            List<object> retorno = new List<object>();

            modeloAgenda ma = new modeloAgenda();
            DataTable dt = new DataTable();
            dt = ma.getAgendasDia(idDentista, dtInicial, dtFinal);
            int idEvent = 1;

            foreach (DataRow dr in dt.Rows)
            {
                var item = new { id    = idEvent,
                                 id_agenda = Convert.ToInt32(dr["id_agenda"]), 
                                 start = DateTime.Parse(dr["data_inicial"].ToString()).ToString("M/d/yyyy H:mm"),
                                 end   = DateTime.Parse(dr["data_final"].ToString()).ToString("M/d/yyyy H:mm"), 
                                 title = dr["nome_cliente"].ToString(),
                                 idCliente = Convert.ToInt32(dr["id_cliente"]),
                                 idProcedimentoCliente = Convert.ToInt32(dr["id_procedimento_cliente"]),
                                 observacoes = dr["observacoes"].ToString(),
                                 compareceu = Boolean.Parse(dr["opcao_compareceu"].ToString())
                               };
                retorno.Add(item);
                idEvent++;
            }

            return retorno;
        }
        
        [WebMethod]
        public static List<object> getProcedimentosCliente(int idCliente)
        {
            List<object> retorno = new List<object>();

            modeloProcedimento modelo = new modeloProcedimento();
            DataTable dt = modelo.getProcedimentosCliente(idCliente);

            foreach (DataRow dr in dt.Rows)
            {
                var item = new
                {
                    id_procedimento_cliente = Convert.ToInt32(dr["id_procedimento_cliente"]),
                    nome_procedimento = dr["nome_procedimento"].ToString()
                };
                retorno.Add(item);
            }

            return retorno;
        }

        [WebMethod]
        public static int salvarAgenda(int idProcedimentoCliente, int idDentista, string dtInicial, string dtFinal, string observacoes)
        {
            Ortodoctor.Componentes.Agenda a = new Ortodoctor.Componentes.Agenda();
            a.IdAgenda = -1;
            a.DataInicial = DateTime.Parse(dtInicial);
            a.DataFinal = DateTime.Parse(dtFinal);
            a.Observacoes = observacoes;
            //TODO: Pega id_clinica do usuário logado no sistema.
            //int idClinica = Convert.ToInt32(HttpContext.Current.Session["ID_CLINICA"]);
            int idClinica = 4;
            a.Clinica = new Clinica() { IdClinica = idClinica };
            a.Dentista = new Dentista() { IdDentista = idDentista };
            a.ProcedimentoCliente = new Procedimento_Cliente() { IdProcedimentoCliente = idProcedimentoCliente };

            modeloAgenda ma = new modeloAgenda();
            return ma.insert(a);
        }

        [WebMethod]
        public static void compareceu(int idAgenda)
        {
            modeloAgenda ma = new modeloAgenda();
            ma.marcarComparecimento(idAgenda);
        }

        [WebMethod]
        public static void cancelar(int idAgenda)
        {
            modeloAgenda ma = new modeloAgenda();
            ma.marcarCancelamento(idAgenda);
        }

        [WebMethod]
        public static string getPermissao()
        {
            return HttpContext.Current.Session["USUARIO_ACESSO"].ToString();
        }
        
    }
}